#include "stm32f10x.h"     
#include "delay.h"
#include "key.h"
#include "led.h"
#include "oled.h"

void My_RCC_HSE_Config(uint32_t RCC_PLLSource_HSE_Div,uint32_t RCC_PLLMul)
{
	// 将外设RCC寄存器设置为初始值
	RCC_DeInit();
	// 设置打开外部高速晶振
	RCC_HSEConfig(RCC_HSE_ON);
	// 等待HSE起振
	if(RCC_WaitForHSEStartUp()==SUCCESS){
		// 设置频率
		RCC_HCLKConfig(RCC_SYSCLK_Div1); // AHB
		RCC_PCLK1Config(RCC_HCLK_Div2); // APB1
		RCC_PCLK2Config(RCC_HCLK_Div2); // APB2
		RCC_PLLConfig(RCC_PLLSource_HSE_Div, RCC_PLLMul); // PLL设置
		RCC_PLLCmd(ENABLE); // 使能PLL
		// 判断PLL就绪
		while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
		// 将系统时钟设置为PLLCLK
		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
		// 等待系统设置好时钟源
		while(RCC_GetSYSCLKSource()!=0x08);
}}


int main(){
	// 系统时钟频率设置
	My_RCC_HSE_Config(RCC_PLLSource_HSE_Div2, RCC_PLLMul_9); // 36Mhz
	
	OLED_Init();
	LED_Init();
	// 显示系统频率
	RCC_ClocksTypeDef RCC_Clocks;
	RCC_GetClocksFreq(&RCC_Clocks);
	OLED_ShowString(1,1,"SYS:");
	OLED_ShowNum(1,6,RCC_Clocks.SYSCLK_Frequency,10);
	OLED_ShowString(2,1,"APB2:");
	OLED_ShowNum(2,6,RCC_Clocks.PCLK2_Frequency,10);
	OLED_ShowString(3,1,"APB1:");
	OLED_ShowNum(3,6,RCC_Clocks.PCLK1_Frequency,10);

	while(1)
	{			
		LED1_Turn();
		Delay_ms(500);		
	}	
}




